【新機能】Amazon AthenaがクロスアカウントでAWS Glue Data Catalogにアクセスできるようになりました!
朗報です!本日より、Amazon Athenaから別アカウントのAWS Glue Data Catalogのデータベースやテーブルにクエリできるようになりました!
マルチアカウントでAWSデータレイクを構築・運用しているプロジェクトにとって、かなり嬉しいアップデートでしょう。
何が嬉しいのか?
これまでAthenaから別アカウントのデータレイク(S3など)を参照したい場合、そのデータソースを定義したGlue Data Catalogをそれぞれのアカウント下で複製する必要がありました。アカウント数が増えるほどカタログの管理が複雑化してくる点で、管理コストがかかっていたユーザーも多かったのではないでしょうか?
今回のアップデートで、例えば一つのアカウントにカタログを集約して、別アカウントのAthenaからクエリを投げられるようになりました。マルチアカウントのデータレイク管理が捗りそうですね!
料金・制限など
クロスアカウント・カタログアクセスに対する料金は発生しません。Glue Data CatalogとAthenaのの標準の使用料のみの請求です。
クロスアカウント・カタログアクセスは現在、Athena engine version 2がサポートされているリージョンのみで使用可能です。また、現状CREATE VIEW
文のみクロスアカウント・アクセスは非対応とのことです。
実際に試してみた
便宜上、カタログを所有するアカウントをOwner、Ownerのカタログを参照する別アカウントをBorrowerと定義します。クロスアカウント・カタログアクセスを有効にするには、①Ownerアカウント内でBorrowerアカウントからのアクセスを許可するIAM Policyを作成し、②BorrowerアカウントでOwnerアカウントのリソースにアクセスするためのIAM PolicyをIAM RoleまたIAM Userにアタッチする必要があります。
まずは①のIAM Policyから作成していきます。OwnerアカウントのGlueコンソールからSettings
を開きます。
Permissionsの項目にIAM Policyを書けるフォームがあるので、以下のように入力します。私の環境では、41XXXXXXXXXX
で始まるアカウントがBorrower、10XXXXXXXXXX
で始まるアカウントがOwnerで、BorrowerアカウントのIAM RoleをPrincipal
に指定しました。Ownerアカウントのリソース権限はワイルドカード*
を使って緩めに設定しています。
{ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Principal" : { "AWS" : [ "arn:aws:iam::41XXXXXXXXXX:role/cm-haruta.takumi" ] }, "Action" : "glue:*", "Resource" : [ "arn:aws:glue:ap-northeast-1:10XXXXXXXXXX:catalog", "arn:aws:glue:ap-northeast-1:10XXXXXXXXXX:database/*", "arn:aws:glue:ap-northeast-1:10XXXXXXXXXX:table/*" ] } ] }
続いて、①のIAM Policyを作成します。Borrowerのアカウントに切り替え、IAMコンソールからRoles
を開きます。
先ほどPrincipal
に指定したRoleをクリック → Attach policies
をクリック → Create policy
をクリックします。
JSONのエディタから、先ほどOwnerアカウントのIAM Policyと同じResourceを定義します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:*", "Resource": [ "arn:aws:glue:ap-northeast-1:10XXXXXXXXXX:catalog", "arn:aws:glue:ap-northeast-1:10XXXXXXXXXX:database/*", "arn:aws:glue:ap-northeast-1:10XXXXXXXXXX:table/*" ] } ] }
任意のPolicy名を設定し、IAM Roleに作成したPolicyがアタッチできていればOKです。
IAMの設定が完了したら、Borrowerのアカウントで、Ownerアカウントを参照するAthenaのData Sourceを作成します。
Athenaのコンソールを開き、Connect data source
をクリックします。
このままNext
をクリックします。
Step 2: Connection details
の画面で、AWS Glue Data Catalog in another account
という項目があるので、こちらを選択してNext
をクリックします。
続きの設定画面で、Catalog nameにownerCatalog
、Catalog IDにOwnerアカウントのIDを入力します。
いざ、Data source
でownerCatalog
を選択…!すんなりとOwnerアカウントのテーブルを取得することができました!
もちろん、クエリも可能です。
最後に
思ってた以上に簡単い設定でき、快適に使うことができました!今までアカウントごとにカタログを複製していた方は、ぜひこちらの機能に切り替えることをオススメします。